
const Router = require('koa-router')
const router = new Router({
    prefix: '/v1/token'
})
const User = require('../../models/user')
const { LoginType } = require('../../lib/enum')
const { TokenValidator, NotEmptyValidator } = require('../../validators/validator')
const { generateToken } = require('../../../core/util')
const { WXManager } = require('../../services/wx')
const {Auth} = require('../../../middlewares/auth')

// 生成token的接口
router.post('/', async(ctx) => {
    const v = await new TokenValidator().validate(ctx);
    // 验证用户密码是否正确
    let token;
    switch (v.get('body.type')) {
        case LoginType.USER_EMAIL:
             token = await emailLogin(v.get('body.account'), v.get('body.secret'))
            break;
           
        case LoginType.USER_MINI_PROGRAM:
             token = await WXManager.codeToToken(v.get('body.account'))
             break;
        default:
            throw new global.errs.ParameterException('没有相应的处理函数!')
            break;
    }
    ctx.body = {
        token
    }
});

// 验证token的接口
router.post('/verify', async (ctx, next) => {
    const v = await new NotEmptyValidator().validate(ctx);
    const result = Auth.verifyToken(v.get('body.token'));
    ctx.body= {
        result
    }
})   


async function emailLogin(account, secret) {
    const user = await User.verifyEmailPassword(account, secret);
    return generateToken(user.id, 2);
}

module.exports = router;

// const Router = require('koa-router');
// const router = new Router({
//     prefix: '/v1/token'
// })

// const {
//     TokenValidator, NotEmptyValidator
// } = require('../../validators/validator')


// const {
//     LoginType
// } = require('../../lib/enum')

// const {
//     generateToken
// } = require('../../../core/util')

// const User = require('../../models/user')

// const {
//     WXManager
// } = require('../../services/wx')

// const {
//     Auth
// } = require('../../../middlewares/auth')

// // 获取token的接口
// router.post('/', async (ctx, next) => {
//    const v = await new TokenValidator().validate(ctx);
//    let token = null;
//    switch (v.get('body.type')) {
//        case LoginType.USER_EMAIL:
//            token = await emailLogin(v.get('body.account'), v.get('body.secret'))
//            break;
//        case LoginType.USER_MINI_PROGRAM:
//            token = await WXManager.codeToToken(v.get('body.account'))
//            break;
//        default:
//            break;
//    }
//    ctx.body = {
//        token
//    }
// });

// // 验证token的接口
// router.post('/verify', async (ctx, next) => {
//     const v = await new NotEmptyValidator().validate(ctx);
//     const result = await Auth.verifyToken(v.get('body.token'));
//     ctx.body = {
//         result
//     }
// })

// async function emailLogin(account, secret) {
//     const user = await User.verifyEmailPassword(account, secret);
//     return generateToken(user.isNewRecord, 2);
// }
// module.exports = router;